#ifndef _AUDIO_H_
#define _AUDIO_H_
#include "esp_err.h"
#include "esp_log.h"
#include "esp_check.h"
#include "driver/i2s_std.h"
/***********************************************************/
/*********************    音频 ↓   *************************/
#define ADC_I2S_CHANNEL 4

#define VOLUME_DEFAULT 60 // 默认声音大小 0~100

#define CODEC_DEFAULT_SAMPLE_RATE (16000)
#define CODEC_DEFAULT_BIT_WIDTH   (32)
#define CODEC_DEFAULT_ADC_VOLUME  (24.0)
#define CODEC_DEFAULT_CHANNEL     (2)

#define BSP_I2S_NUM I2S_NUM_1

#define GPIO_I2S_LRCK (GPIO_NUM_13)
#define GPIO_I2S_MCLK (GPIO_NUM_38)
#define GPIO_I2S_SCLK (GPIO_NUM_14)
#define GPIO_I2S_SDIN (GPIO_NUM_10)
#define GPIO_I2S_DOUT (GPIO_NUM_45)
#define GPIO_PWR_CTRL (GPIO_NUM_NC)

esp_err_t bsp_codec_init(void);//初始化音频
esp_err_t bsp_i2s_write(void *audio_buffer, size_t len, size_t *bytes_written, uint32_t timeout_ms);//写音频数据
esp_err_t bsp_codec_set_fs(uint32_t rate, uint32_t bits_cfg, i2s_slot_mode_t ch);//设置音频参数
esp_err_t bsp_speaker_set_fs(uint32_t rate, uint32_t bits_cfg, i2s_slot_mode_t ch);//设置播放音频参数
esp_err_t bsp_codec_mute_set(bool enable);                                         //设置静音状态
esp_err_t bsp_codec_volume_set(int volume, int *volume_set);//设置播放音量
esp_err_t get_voice_record_data(int16_t *buffer, int buffer_len, int *data_len); //获取录音数据
int bsp_get_feed_channel(void); // 获取麦克风通道数量

esp_err_t bsp_get_feed_data(bool is_get_raw_channel, int16_t *buffer, int buffer_len); //获取麦克风数据并进行通道重排

#define START_MUSIC_COMPLETED BIT0
#define WIFI_SET_START        BIT1
void power_music_task(void *pvParameters);

i2s_chan_handle_t get_i2s_tx_chan(void);
i2s_chan_handle_t get_i2s_rx_chan(void);
void renew_codec_fs(void);//设置音频参数为默认值
bool i2s_fs_is_default(uint32_t rate, uint32_t bits_cfg, uint32_t ch); //判断音频参数是否为默认值
/*********************    音频 ↑   *************************/
/***********************************************************/

/************************录音机*********************************/
#define VOICE_I2S_CHAN_NUM    (2)
#define VOICE_I2S_SAMPLE_RATE (48000)
#define VOICE_I2S_SAMPLE_BITS (16)
    void voive_i2s_fs_init(void);
/************************录音机 end*********************************/
#endif /* _AUDIO_H_ */